//
//  HZUserAccountViewModel.swift
//  HansWeibo
//
//  Created by Hans on 16/8/11.
//  Copyright © 2016年 Hans. All rights reserved.
//

import UIKit

class HZUserAccountViewModel: NSObject {

    //全局访问点
    static let sharedTools:HZUserAccountViewModel = HZUserAccountViewModel()
    //用户信息的对象 (为了防止频繁使用沙盒)
    var userAccount: HZUserAccessModel?
    
    //路径
    let file = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    
    var access_token: String?{
        // 如果微博返回的时间 和当前时间对比为降序  就代表没有过期
        if userAccount?.access_token != nil {
            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
                return userAccount?.access_token
            }else{
                return nil
            }
        }else{
            //代表 没登录
            return nil
        }
    }
    
    // 判断用户是否登录
    var isLogin: Bool{
        return access_token != nil
    }
    
    //单例 这个方法只会走一次
    override init() {
        super.init()
        //给当前类身上的属性赋值
        userAccount = getUserAccount()
    }
    
}


//MARK: - 保存数据
extension HZUserAccountViewModel {
    
    // 保存对象
    func saveUserAccount(userAccount: HZUserAccessModel){
        // 如果第一次保存数据成功后 使用userAccount 为nil
        // 因为在第一次单例实例化的时候 走init方法  对userAccount赋值 从沙盒中获取的对象就是nil 单例只会走一次init方法  所以不能再赋值 只能在保存对象的时候  手动赋值
        self.userAccount = userAccount
        //保存对象
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: file)
        
    }
    
    //获得对象
    func getUserAccount ()-> HZUserAccessModel? {
        
        let result = NSKeyedUnarchiver.unarchiveObjectWithFile(file) as? HZUserAccessModel
        return result
    }
    
    
    
}



//MARK: - 请求数据
extension HZUserAccountViewModel{
    
    // 获取授权
    func setUserAccount(code: String, finish:(isSusses: Bool)->()){
        //发送请求
        HZNetworkTools.sharedTools.oauthLoadUserAccount(code, success: { (response) in
            //判断response 是否为nil 而且可以转成字典
            // 通过if-let 或者 guard-let 判断可选值是否能转成我们需要的类型用  as？
            guard let res = response as? [String : AnyObject] else {
                finish(isSusses: false)
                return
            }
            // 通过字典 创建一个模型
            let userAccont = HZUserAccessModel(dict: res)
//            print(userAccont)
            self.getuserInfo(userAccont, finish: finish)
        }) { (error) in
//            print("失败1\(error)")
            finish(isSusses: false)
        }
    }
    
    
    //请求个人信息
    func getuserInfo(userAccount: HZUserAccessModel, finish:(isSusses: Bool)->()){
        //发送请求
        HZNetworkTools.sharedTools.oauthLoadUserInfo(userAccount, success: { (response) in
            
            guard let res = response as? [String:AnyObject] else {
                finish(isSusses: false)
                return
            }
            //赋值
            userAccount.screen_name = res["screen_name"] as? String
            userAccount.avatar_large = res["avatar_large"] as? String
            
//            print(userAccount)
            // 保存对象
            self.saveUserAccount(userAccount)
            
            finish(isSusses: true)
        }) { (error) in
//            print("失败2\(error)")
            finish(isSusses: false)
        }
    }

    
}

































